/*自身对应的.h文件*/
#include "drv_sys_time.h"

/*程序内部对应的.h文件*/
#include "log.h"

/*外部库对应的.h文件*/

/*系统.h文件*/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <signal.h>

static uint64_t g_sys_time_run_time = 0;

/***************************************************************
 * Name:	 time_out_cb()
 * Input : NULL
 * Output: void
 * Return: void
 * Author: hwl
 * Revise: V1.0
 * Description: 定时超时回调函数
 ***************************************************************/
static void time_out_cb(int sig)
{
	g_sys_time_run_time++;
}

/***************************************************************
 * Name:	 drv_sys_time_init()
 * Input : void
 * Output: void
 * Return: -1:失败 0:成功
 * Author: hwl
 * Revise: V1.0
 * Description: 系统时间初始化
 ***************************************************************/
int drv_sys_time_init(void)
{
	static struct itimerval tick;
	
	signal(SIGALRM, time_out_cb);
	memset(&tick, 0, sizeof(tick));

	//第一次调用时间
	tick.it_value.tv_sec = 0;
	tick.it_value.tv_usec = 1000;

	//第一次调用后，每次调用间隔时间
	tick.it_interval.tv_sec = 0;
	tick.it_interval.tv_usec = 1000;

	if(setitimer(ITIMER_REAL, &tick, NULL) < 0)
	{
		printf("Set timer failed!\n");
	}
}

/***************************************************************
 * Name:	 drv_sys_time_get_time_ms()
 * Input : void
 * Output: void
 * Return: 运行时间ms
 * Author: hwl
 * Revise: V1.0
 * Description: 获取系统运行时间
 ***************************************************************/
uint64_t drv_sys_time_get_time_ms(void)
{
	return g_sys_time_run_time;
}


/***************************************************************
 * Name:	 drv_sys_time_pase_time_ms()
 * Input : cur_time当前时刻
 * Output: void
 * Return: 过去的时间
 * Author: hwl
 * Revise: V1.0
 * Description: 距离cur_time时刻过去了多久
 ***************************************************************/
uint64_t drv_sys_time_pase_time_ms(uint64_t cur_time)
{
	if(g_sys_time_run_time >= cur_time)
	{
		return g_sys_time_run_time - cur_time;
	}
	else
	{
		return (0xFFFFFFFFFFFFFFFF - g_sys_time_run_time) + cur_time;
	}
}
